dojo.connect(window, "onunload", function() {
	if (window.parent) {
		try {
			window.parent.clearEvents("${pageId!}");
		} catch(e) {
		}
	}
});

/**
 * 处理返回消息的函数
 * json json格式的消息
 */
function handleJsonMessage(arg) {
	var json = arg.message || [];
	var callback = arg.callback || null;
	if (json.length > 0) {
		var error = false;
		var waring = false;
		var msg = [];
		for (var i = 0; i < json.length; i++) {
			if (json[i].type == 3) {
				error = true;
			}
			if (json[i].type == 2) {
				waring = true;
			}
			msg.push(json[i].text);
		}
		if (error) {
			parent.Error(msg.join("\n"));
			return;
		}
		if (waring) {
			parent.Warn(msg.join("\n"), callback);
			return;
		}
		parent.Info(msg.join("\n"), callback);
	}
}

/**
 * 布尔值的格式化处理函数
 * @param value
 */
function booleanFormat(value) {
	if (value == true || value == "true") {
		return "是";
	}
	return "否";
}

/**
 * 判断一个对象中是否包含一个属性
 * @param obj 对象
 * @param key 属性
 */
function containsItem(obj, key) {
	for (var i in obj) {
		if (i === key) {
			return true;
		}
	}
	return false;
}

/**
 * 将datastore里面的数据变成ajax请求参数
 * 主要在处理表格编辑后的保存时ajax操作
 */
function storeToParam(store) {
	var newItems = store._pending._newItems;
	var modifiedItems = store._pending._modifiedItems;
	var deletedItems = store._pending._deletedItems;
	var newItemsName = arguments[1] || "newItems";
	var deletedItemsName = arguments[2] || "deletedItems";
	var modifiedItemsName = arguments[3] || "modifiedItems";
	var param = {};
	var counter = 0;
	var pk = "id";
	for (var i in newItems) {
		//过滤掉已经删除的记录，也就是说是新增完了，又删除了的情况
		//这种情况下不用加到新增的参数中
		if (containsItem(deletedItems, i)) {
			continue;
		}
		for (var j in newItems[i]) {
			//过滤掉其他的参数，
			//因为我们的变量命名不可能以"_"开始，所以，以"_"开始的变量名都不要它
			//因为是新增列表，所以主键都不用设置
			if (j.indexOf("_") == -1 && j != pk) {
				param[newItemsName + "[" + counter + "]." + j] = newItems[i][j];
			}
		}
		counter++;
	}
	counter = 0;
	for (var i in deletedItems) {
		//过滤掉新增的情况,
		//也就是，新增了，但是又删除了，这时候不要加到删除列表中
		if (containsItem(newItems, i)) {
			continue;
		}
		for (var j in deletedItems[i]) {
			if (j === pk) {
				param[deletedItemsName + "[" + counter + "]." + j] = deletedItems[i][j];
			}
		}
		counter++;
	}
	counter = 0;
	for (var i in modifiedItems) {
		//i这里是主键
		//去新增列表里面看看是否存在这样的对象，
		//新增了一条记录，但是又修改它了，修改后的对象会保存到新增列表中，所以不用记录了
		if (containsItem(newItems, i)) {
			continue;
		}
//				//当修改完又删除了的情况下，不用记录修改状况，因为在删除列表里面已经有了
//				if (containsItem(deletedItems, i)) {
//					continue;
//				}
		//修改了一条记录，但是又将它删除了，这时候不用记录它的修改，只用删除它就可以了
		if (containsItem(deletedItems, i)) {
			continue;
		}
		var modifiedItem = store._itemsByIdentity[i];
		for (var j in modifiedItem) {
			if (j.indexOf("_") == -1) {
				param[modifiedItemsName + "[" + counter + "]." + j] = modifiedItem[j];
			}
		}
		counter++;
	}
	return param;
}

function storeItemToParam(store, paramName) {
	var arrName = paramName || "item";
	if (store && store._arrayOfAllItems) {
		var param = {};
		dojo.forEach(store._arrayOfAllItems, function(item, index) {
			for (var i in item) {
				if (i.indexOf("_") == -1) {
					param[arrName + "[" + index + "]." + i] = item[i];
				}
			}
		});
		return param;
	}
	return null;
}